x86: allow 64-bit PV guest kernels to suppress user mode exposure of M2P
authorJan Beulich <jbeulich@suse.com>
Mon, 23 Mar 2015 15:51:14 +0000 (16:51 +0100)
committerJan Beulich <jbeulich@suse.com>
Mon, 23 Mar 2015 15:51:14 +0000 (16:51 +0100)
commitd639e6a05a0f8ee0e61c6cc4eebba78934ef3648
tree0b7617f2e7a9b0e541a2c3c813495e305e252b23
parent88a2372c6ba44dd42b915a95a823cf9d4d260e25
x86: allow 64-bit PV guest kernels to suppress user mode exposure of M2P

Xen L4 entries being uniformly installed into any L4 table and 64-bit
PV kernels running in ring 3 means that user mode was able to see the
read-only M2P presented by Xen to the guests. While apparently not
really representing an exploitable information leak, this still very
certainly was never meant to be that way.

Building on the fact that these guests already have separate kernel and
user mode page tables we can allow guest kernels to tell Xen that they
don't want user mode to see this table. We can't, however, do this by
default: There is no ABI requirement that kernel and user mode page
tables be separate. Therefore introduce a new VM-assist flag allowing
the guest to control respective hypervisor behavior:
- when not set, L4 tables get created with the respective slot blank,
  and whenever the L4 table gets used as a kernel one the missing
  mapping gets inserted,
- when set, L4 tables get created with the respective slot initialized
  as before, and whenever the L4 table gets used as a user one the
  mapping gets zapped.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Tim Deegan <tim@xen.org>
xen/arch/x86/domain.c
xen/arch/x86/domain_build.c
xen/arch/x86/mm.c
xen/arch/x86/mm/shadow/multi.c
xen/arch/x86/x86_64/mm.c
xen/include/asm-x86/config.h
xen/include/asm-x86/mm.h
xen/include/public/xen.h